MySQL5.7.12 Base Logseq Stream
操作系统配置
开放防火墙端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
查看某个端口
firewall-cmd --zone=public --query-port=80/tcp
操作系统配置(可选)
systemctl stop firewalld
systemctl disable firewalld
配置主端准备
设置server_id
server_id = 1;
开启log-bin
log-bin=on
检查是否开启bin log 日志:
show variables like '%log_bin%';
此选项是只读选项,需要添加到
my.cnf
文件中。 且需要重启数据库。
确认以下参数为打开1 状态。
show variables like '%sync_binlog%';
show variables like '%innodb_flush_log_at_trx%';
在主端上创建从端连接的用户
CREATE USER 'repl'@'192.168.10.164' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.10.164';
确定主端的postion
- 锁住所有表,只能读不能写。
FLUSH TABLES WITH READ LOCK;
- 显示postion 位置
SHOW MASTER STATUS;
配置log-bin 的保留日志
expire_logs_days=10
配置备端
生成新的uuid
删除datadir
中的auto.conf文件。会自动生成新的uuid。
设置server_id
server_id = 2
注意:不能设置为0 ,否则禁止所有链接。
注意2:需要不同的
初始化数据导入
- 如果没有存量数据,则可以不进行初始化。
- 如果有存量数据,请使用
mysqldump
进行数据初始化。
制作从库镜像
mysqldump -uroot -p1234 --all-databases --master-data > dbdump.db
生成备份
mysqldump -uroot -p1234 --all-databases --master-data > dbdump.db
配置从库
数据库初始化
mysql -u root -p1234
mysql < dbdump.db
创建主从服务器
CHANGE MASTER TO
MASTER_HOST='192.168.10.163',
MASTER_USER='repl',
MASTER_PASSWORD='repl',
master_log_file='on.000004',
MASTER_LOG_POS=154;
启动slave 端
start slave ;
查看slave 端是否正常
show slave status\G
配置到此完成
经验
丢数据场景一:
- 如果binglog 还未应用,就被清除后,会丢数据,且slave 会报对应错误。
- 可以重新执行binlog 的起始位置。继续同步。
- 会丢数据。
刷新日志进行日志传输
flush logs;
设置过滤规则
只应用(不应用)某个DB 数据库(MySQL 8.0)
CHANGE REPLICATION FILTER REPLICATE_DO_DB = (ad_test) FOR CHANNEL channel1;
只应用(不应用)某个DB 数据库(MySQL 5.7)
CHANGE REPLICATION FILTER REPLICATE_DO_DB = (ad_test),REPLICATE_IGNORE_DB = (ad_test);
排除数据库(MySQL8.0)
CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB = (ad_test) FOR CHANNEL channel1;
排除数据库(MySQL5.7)
CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB = (ad_test) ;
只应用某些表
CHANGE REPLICATION FILTER
REPLICATE_WILD_DO_TABLE = ('ad_test.old%');
当
REPLICATE_DO_DB
指定时,这个参数优先级低于REPLICATE_DO_DB
.
从DB1 语句转写到DB2
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((db1, db2));
同时指定同一个库
CHANGE REPLICATION FILTER REPLICATE_DO_DB = (ad_test),REPLICATE_IGNORE_DB = (ad_test) ;
CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB = (ad_test) ,REPLICATE_DO_DB = (ad_test);
ad_test 下的库所有表都不会过滤。
同时指定一个表
CHANGE REPLICATION FILTER REPLICATE_DO_TABLE = (ad_test),REPLICATE_IGNORE_TABLE = (ad_test) ;
CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE = (ad_test),REPLICATE_DO_TABLE = (ad_test) ;
清空过滤规则
CHANGE REPLICATION FILTER
REPLICATE_DO_DB = (),
REPLICATE_IGNORE_DB = (),
REPLICATE_REWRITE_DB=(),
REPLICATE_WILD_DO_TABLE=(),
REPLICATE_WILD_IGNORE_TABLE=(),
REPLICATE_DO_TABLE=(),
REPLICATE_IGNORE_TABLE=();
相同语句最后一个生效
CHANGE REPLICATION FILTER
REPLICATE_DO_DB = (db1, db2), REPLICATE_DO_DB = (db3, db4);
CHANGE REPLICATION FILTER
REPLICATE_DO_DB = (db3, db4);
以上语句生效的只有DB3,和DB4.
范例
*************************** 1. row ***************************
File: mysql-bin.000051
Position: 37448556
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: ddb8668b-57e1-11e7-9542-005056a34180:1-46297024
1 row in set (0.00 sec)
CHANGE MASTER TO
MASTER_HOST='192.168.10.163',
MASTER_USER='repl',
MASTER_PASSWORD='repl',
master_log_file='mysql-bin.000008',
MASTER_LOG_POS=320;
CHANGE MASTER TO
MASTER_HOST = '10.1.34.180',
MASTER_PORT = 3306,
MASTER_USER = 'root',
MASTER_PASSWORD = 'JyjflaJLF*fladf123',
master_log_file='mysql-bin.000001',
MASTER_LOG_POS=352751;
CHANGE MASTER TO
MASTER_HOST = '10.1.34.180',
MASTER_PORT = 3306,
MASTER_USER = 'root',
MASTER_PASSWORD = 'JyjflaJLF*fladf123',
MASTER_CONNECT_RETRY=10,
MASTER_AUTO_POSITION = 1;
MASTER_CONNECT_RETRY=10,
change master to MASTER_AUTO_POSITION = 0;
FOR CHANNEL 'channel1';